#!/usr/bin/env python
"""
花仙馆项目启动脚本
用于快速启动开发环境
"""

import os
import sys
import subprocess
import time

def run_command(command, description):
    """执行命令并显示描述"""
    print(f"\n🚀 {description}...")
    try:
        result = subprocess.run(command, shell=True, check=True, capture_output=True, text=True)
        print(f"✅ {description}完成")
        return True
    except subprocess.CalledProcessError as e:
        print(f"❌ {description}失败: {e}")
        if e.stdout:
            print(f"输出: {e.stdout}")
        if e.stderr:
            print(f"错误: {e.stderr}")
        return False

def check_requirements():
    """检查环境要求"""
    print("🔍 检查环境要求...")
    
    # 检查Python版本
    if sys.version_info < (3, 8):
        print("❌ Python版本需要3.8或更高")
        return False
    
    print(f"✅ Python版本: {sys.version}")
    
    # 检查必要的包
    required_packages = ['django', 'djangorestframework', 'mysqlclient']
    missing_packages = []
    
    for package in required_packages:
        try:
            __import__(package.replace('-', '_'))
        except ImportError:
            missing_packages.append(package)
    
    if missing_packages:
        print(f"❌ 缺少必要的包: {', '.join(missing_packages)}")
        print("请运行: pip install -r requirements.txt")
        return False
    
    print("✅ 所有必要的包都已安装")
    return True

def setup_database():
    """设置数据库"""
    print("\n📊 设置数据库...")
    
    # 生成迁移文件
    if not run_command("python manage.py makemigrations", "生成数据库迁移文件"):
        return False
    
    # 执行迁移
    if not run_command("python manage.py migrate", "执行数据库迁移"):
        return False
    
    return True

def create_superuser():
    """创建超级用户"""
    print("\n👤 创建管理员账户...")
    print("请按提示输入管理员信息:")
    
    try:
        subprocess.run("python manage.py createsuperuser", shell=True, check=True)
        print("✅ 管理员账户创建成功")
        return True
    except subprocess.CalledProcessError:
        print("⚠️ 管理员账户创建跳过或失败")
        return True  # 不阻止启动

def collect_static():
    """收集静态文件"""
    return run_command("python manage.py collectstatic --noinput", "收集静态文件")

def start_server():
    """启动开发服务器"""
    print("\n🌟 启动开发服务器...")
    print("服务器将在 http://127.0.0.1:8000 启动")
    print("管理后台地址: http://127.0.0.1:8000/admin")
    print("API文档地址: http://127.0.0.1:8000/api/v1")
    print("\n按 Ctrl+C 停止服务器")
    
    try:
        subprocess.run("python manage.py runserver", shell=True, check=True)
    except KeyboardInterrupt:
        print("\n👋 服务器已停止")

def main():
    """主函数"""
    print("🌸 欢迎使用花仙馆项目启动脚本")
    print("=" * 50)
    
    # 检查环境
    if not check_requirements():
        sys.exit(1)
    
    # 设置数据库
    if not setup_database():
        print("❌ 数据库设置失败")
        sys.exit(1)
    
    # 询问是否创建超级用户
    create_admin = input("\n是否创建管理员账户? (y/n): ").lower().strip()
    if create_admin in ['y', 'yes', '是']:
        create_superuser()
    
    # 收集静态文件
    collect_static()
    
    print("\n🎉 项目设置完成!")
    print("\n项目信息:")
    print("- 项目名称: 花仙馆")
    print("- 后端框架: Django + DRF")
    print("- 数据库: MySQL")
    print("- 缓存: Redis")
    print("- 文件存储: 阿里云OSS")
    
    # 启动服务器
    start_input = input("\n是否立即启动开发服务器? (y/n): ").lower().strip()
    if start_input in ['y', 'yes', '是']:
        start_server()
    else:
        print("\n手动启动服务器命令: python manage.py runserver")
        print("祝您开发愉快! 🌸")

if __name__ == "__main__":
    main()